import axios, { AxiosRequestConfig, AxiosError } from 'axios'

// 创建 axios 实例
const instance = axios.create({
  baseURL: '/api',
  timeout: 1200000, // 增加超时时间到20分钟，适应批量生成的需求
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 在这里可以添加认证信息等
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error: AxiosError) => {
    // 处理错误响应
    if (error.response) {
      // 服务器返回错误状态码
      console.error('Response error:', error.response.data)
    } else if (error.request) {
      // 请求发送成功但没有收到响应
      console.error('Request error:', error.request)
      // 检查是否是超时错误
      if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
        console.error('请求超时，可能是因为服务器处理时间过长')
      }
    } else {
      // 请求配置出错
      console.error('Error:', error.message)
    }
    return Promise.reject(error)
  }
)

// 通用请求方法
export const request = {
  get: <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => {
    return instance.get(url, config)
  },

  post: <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => {
    // 对于SD生成图片的请求，可能需要更长的超时时间
    const isSDGenerateRequest = url.includes('/sd/generate') || url.includes('/sd/batch_generate')
    const finalConfig = isSDGenerateRequest 
      ? { ...config, timeout: 1800000 } // 30分钟超时，适用于批量生成
      : config
    
    return instance.post(url, data, finalConfig)
  },

  put: <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => {
    return instance.put(url, data, config)
  },

  delete: <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => {
    return instance.delete(url, config)
  }
}

export default request
